package top100

// 第一反应想到最简单的方法是 覆盖, 后面补0
func moveZeroes(nums []int) {
	n := len(nums)
	cnt := 0
	for i := 0; i < n; i++ {
		if nums[i] != 0 {
			if i != cnt {
				nums[cnt] = nums[i]
			}
			// 计数加1
			cnt += 1
		}
	}
	// 最后补 0
	for i := cnt; i < n; i++ {
		nums[i] = 0
	}
}

// 快慢指针，快指针非0值，慢指针0值
func moveZeroes1(nums []int) {
	n := len(nums)
	for i, j := 0, 0; j < n; j++ {
		// i 找第一个0的位置
		for i < n && nums[i] != 0 {
			i++
		}
		// j寻找 非0，判断是否交换
		if nums[j] != 0 && j > i {
			nums[i], nums[j] = nums[j], nums[i]
		}
	}
}
